package com.g2.g2zuulgateway.filter;

import com.netflix.zuul.ZuulFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * route类型过滤器: 适用于灰度发布的场景，在将要路由的时候可以做一些自定义的逻辑。
 */
public class GrayscaleFilter extends ZuulFilter {
    private static Logger log = LoggerFactory.getLogger(GrayscaleFilter.class);

    /**
     * 在路由请求时被调用执行。
     * @return
     */
    @Override
    public String filterType() {
        return "route";
    }

    /**
     * 返回过滤器执行的顺序
     * 当请求在一个阶段有多个过滤器是，需要根据该方法的返回值来依次执行
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * shouldFilter 判断该过滤器是否需要被执行
     * 这里直接返回true，表示该过滤器对所有请求都会生效。
     * 实际运用中我们可以利用该函数指定过滤器的有效范围
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 过滤器的具体逻辑
     * @return
     */
    @Override
    public Object run() {
        log.info("route filter");
        return null;
    }
}
